package org.example.base;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        //对Controller中的路径，添加前缀
        //第一个参数：要添加的前缀，第二个参数用于过滤Controller中的方法
        configurer.addPathPrefix("api",(c)-> true);
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //添加一个Controller请求映射方法的拦截器，就可以统一处理请求
        //1.添加一个拦截器=>定义前置和后置逻辑
        //2.通过匹配服务资源路径，决定是否执行拦截器
        //=>先通过路径，决定是否执行拦截器，然后在决定是否执行请求映射方法

        //我们这里，实现一个会话管理的敏感资源校验：
        //添加一个会话管理的拦截器（添加前置逻辑：登录就返回true，未登录返回false）
        //添加敏感资源路径
        registry.addInterceptor(new LoginIntercepor())
                //后端的资源路径，都带有/api的前缀，**表示任意多层的路径，*表示任意一层路径
                //=> /api/abc匹配到/api/*, 及/api/**
                //=> /api/a/b/c只能匹配/api/**，不能匹配/api/*
                .addPathPatterns("/api/**")
                //添加所有后端路径，再排除不需要登录，就能访问的路径
                .excludePathPatterns("/api/user/login");//排除登录路径
    }
}